// 测试项目创建功能
const ResearchProjectService = require('./project/plm/service/research_project_service.js');

// 主函数
async function testProjectCreate() {
  console.log('===== 开始测试项目创建 =====');
  
  try {
    // 创建服务实例
    const service = new ResearchProjectService();
    
    // 创建测试数据 - 包含大量自定义字段和各种类型的值
    const testData = {
      model: 'TEST-MODEL-' + Date.now(),
      projectType: '霍尔',
      projectTypeName: '电机控制类',
      customerName: '测试客户',
      description: '这是一个测试项目',
      priority: 'normal',
      startDate: Math.floor(Date.now() / 1000),
      deadline: Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60, // 30天后
      
      // 样机相关字段
      hasSample: '有',
      sampleCount: '2',
      sampleImages: ['image1.jpg', 'image2.jpg'],
      
      // 控制参数
      controlMode: 'PWM控制',
      workTemp: '-20~50℃',
      certification: 'CE认证',
      
      // 测试级别字段
      level1: 1,
      level2: 'director',
      
      // 特殊测试字段 - 这些字段不在schema中
      customField1: '自定义字段1',
      customField2: '自定义字段2',
      
      // 特殊类型字段
      numberField: 12345,
      booleanField: true,
      nullField: null,
      dateField: new Date().toISOString(),
      
      // 复杂数组
      customArray: [1, 2, 3, '测试', true, { nested: 'value' }],
      
      // 复杂对象结构
      customObject: { 
        key: 'value', 
        nested: { 
          key: 'value',
          array: [1, 2, 3],
          deep: {
            deeper: {
              deepest: 'test'
            }
          }
        },
        numbers: [1, 2, 3, 4, 5]
      },
      
      // 项目相关人员
      projectLead: '张三',
      projectTeam: ['李四', '王五', '赵六'],
      departmentInfo: {
        name: '研发部',
        manager: '张经理',
        headcount: 15
      },
      
      // 带点的特殊字段名(测试是否会被过滤)
      'special.field': '特殊字段',
      'very.deep.field.name': '非常深的字段',
      
      // 非常长的字段值
      longDescription: '这是一个非常长的描述'.repeat(20),
      
      // 系统保留字段名(测试是否会被保留)
      _specialId: 'custom-id-value',
      $specialMark: 'special-mark-value'
    };
    
    console.log('测试数据字段数:', Object.keys(testData).length);
    console.log('测试数据字段:', Object.keys(testData).join(', '));
    
    // 调用创建方法
    console.log('调用createProject方法...');
    const result = await service.createProject(testData);
    
    // 输出结果
    console.log('创建结果:', result);
    
    // 如果创建成功，查询详情验证字段保存情况
    if (result.code === 0 && result.data && result.data._id) {
      console.log('项目创建成功, ID:', result.data._id);
      console.log('已保存字段数:', result.data._savedFields);
      console.log('原始字段数:', result.data._originalFields);
      console.log('字段保存率:', Math.round(result.data._savedFields / result.data._originalFields * 100) + '%');
      
      // 引入项目模型进行直接查询
      const ProjectModel = require('./project/plm/model/project_model.js');
      
      // 查询项目详情 - 使用静态方法避免过滤
      const projectDetail = await ProjectModel.getOne(result.data._id);
      
      if (projectDetail) {
        console.log('查询到项目详情，字段数:', Object.keys(projectDetail).length);
        
        // 检查关键字段是否保存
        const keysToCheck = [
          // 基础字段
          'model', 'projectType', 'customerName', 'description',
          
          // 样机字段
          'hasSample', 'sampleCount', 'sampleImages',
          
          // 自定义字段
          'customField1', 'customField2',
          
          // 特殊类型字段
          'numberField', 'booleanField', 'nullField', 'dateField',
          
          // 复杂字段
          'customArray', 'customObject',
          
          // 项目人员字段
          'projectLead', 'projectTeam', 'departmentInfo',
          
          // 特殊名称字段
          'special.field', 'very.deep.field.name',
          
          // 长字段值
          'longDescription',
          
          // 系统保留字段名
          '_specialId', '$specialMark'
        ];
        
        console.log('\n字段保存检查:');
        let savedCount = 0;
        for (const key of keysToCheck) {
          const isPresent = projectDetail.hasOwnProperty(key);
          console.log(`字段 ${key}: ${isPresent ? '已保存 ✓' : '未保存 ✗'}`);
          if (isPresent) savedCount++;
        }
        
        console.log(`\n检查结果: ${savedCount}/${keysToCheck.length} 字段成功保存 (${Math.round(savedCount/keysToCheck.length*100)}%)`);
        
        // 检查复杂对象是否完整保存
        if (projectDetail.customObject) {
          console.log('\n复杂对象检查:');
          console.log('- customObject.nested存在:', Boolean(projectDetail.customObject.nested));
          console.log('- customObject.nested.deep存在:', 
            Boolean(projectDetail.customObject.nested && projectDetail.customObject.nested.deep));
          console.log('- 最深层字段存在:', 
            Boolean(projectDetail.customObject.nested && 
                   projectDetail.customObject.nested.deep && 
                   projectDetail.customObject.nested.deep.deeper && 
                   projectDetail.customObject.nested.deep.deeper.deepest));
        }
      } else {
        console.log('无法查询到刚创建的项目');
      }
    } else {
      console.log('项目创建失败:', result);
    }
    
  } catch (error) {
    console.error('测试出错:', error);
  }
  
  console.log('===== 测试完成 =====');
}

// 执行测试
testProjectCreate().then(() => {
  console.log('测试脚本执行完毕');
}); 